Method and apparatus for capturing video data to a virtual screen buffer

ABSTRACT

A remote management controller may include a capture engine and a processor. The capture engine may be configured to obtain a slice of video data output from a video graphics controller, calculate at least one value correlative to the slice of video data, and, if the calculated value for any portion of the slice differs from a value for a previously obtained corresponding portion, move the portion to a virtual screen buffer and update a first table associated with the virtual screen buffer with the calculated value, the first table configured to store values for each slice of video data. The processor may be configured to access the video data from the virtual screen buffer, calculate a value correlative to each portion of video data in the virtual screen buffer, and process the portion of video data in the virtual screen buffer for transmission to a remote system if the calculated value for the portion of video data in the virtual screen buffer differs from the calculated value for the portion of video data stored in a second table associated with an image related to the remote system.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application claims priority to provisional application Ser. No.60/603,796, filed on Aug. 23, 2004. This application is further relatedto the following applications filed, which are filed concurrently withthis application and which list the same inventors as this application:

Method and Apparatus for Capturing Slices of Video Data, filed on Aug.23, 2005, and assigned application serial no. ______;

Method and Apparatus for Capturing and Transmitting Screen Images, filedon Aug. 23, 2005, and assigned application serial no. ______;

Method and Apparatus for Redirection of Video Data, filed on Aug. 23,2005, and assigned application serial no. ______; and

Method and Apparatus for Managing Changes in a Virtual Screen Buffer,filed on Aug. 23, 2005, and assigned application serial no. ______

BACKGROUND OF THE RELATED ART

This section is intended to introduce the reader to various aspects ofart that may be related to various aspects of the present invention thatare described and/or claimed below. This discussion is believed to behelpful in providing the reader with background information tofacilitate a better understanding of the various aspects of the presentinvention. Accordingly, it should be understood that these statementsare to be read in this light, and not as admissions of prior art.

Processor-based devices, such as computer systems, may be linkedtogether via one or more networks, such as Local Area Networks (“LANs”)or Wide Area Networks (“WANs”), for example. These networks aregenerally arranged with a particular topology that characterizes thegeometric arrangement of the specific network. For instance, LANs may bearranged in accordance with a bus topology, a ring topology, a startopology, a tree topology, or a combination of such topologies. Further,networks may also be classified by architecture (e.g., peer-to-peer orclient/server) and may be characterized by a protocol that defines acommon set of rules and signals that are utilized to communicate on thenetwork.

Generally, each network includes one or more servers or processingsystems configured to manage and allocate network resources to othersystems coupled to the network. File servers, print servers, networkservers, and database servers, for example, are different types ofprocessing systems that are generally dedicated to performingpre-defined tasks on the network. Each of these systems may provideservices to client systems based upon departmental or logical groupings,which may be distributed across geographic boundaries. As a result, theprocessing systems may be geographically dispersed to provide servicesto client systems in different buildings, cities, states, or countries.

Because the systems may be located in different geographic locations,maintenance and management of the systems may be difficult. Forinstance, a single group or person may provide maintenance andmanagement for the systems, which may be located remotely from some orall of the systems being managed. The time and expense associated withtraveling to each of the systems may be prohibitive and may result inunacceptable levels of support for the systems. Thus, it is beneficialto manage the systems remotely without having to travel to the specificlocation of the systems.

However, the remote management of the systems may provide only limitedaccess to the managed systems. For instance, a managed system may bemonitored by a software-based video redirection technology that providesthe interaction between the operating system and other components to aremote management system. When the operating system is not performingproperly or not loaded, no information is provided to the remotemanagement system monitoring the managed system. That is, thesoftware-based video redirection technology is unable to provide anyvaluable information to the remote management system because it does notfunction when the managed system crashes or enters an “OS (operatingsystem) down” state or when the system is powered off. Further, amanaged system may include additional hardware, which may only work in atext mode and not provide data when the managed system enters agraphical mode. This additional hardware may duplicate componentsalready available on the managed system, which adds to the total cost ofthe system. As such, the remote management solutions are inefficient,limited, and expensive.

BRIEF DESCRIPTION OF THE DRAWINGS

Exemplary embodiments of the present invention may be apparent uponreading of the following detailed description with reference to thedrawings in which:

FIG. 1 is a diagram of a managed system and a remote management systemin accordance with an exemplary embodiment of the present invention;

FIG. 2 is a block diagram of the managed system of FIG. 1 in accordancewith an exemplary embodiment of the present invention;

FIG. 3 is a block diagram of the exemplary remote management controllerof FIG. 2 in accordance with an embodiment of the present invention;

FIG. 4 is a functional block diagram of the exemplary remote managementcontroller and video graphics controller of FIG. 3 in accordance with anembodiment of the present invention;

FIG. 5 is a process flow diagram illustrating the use of the remotemanagement controller of FIG. 4 in accordance with an exemplaryembodiment of the present invention;

FIG. 6 is an exemplary embodiment of the video image that may be dividedinto slices and blocks in accordance with an embodiment of the presentinvention;

FIG. 7 is a functional block diagram of an exemplary embodiment of thecapture engine of FIG. 4 in accordance with an exemplary embodiment ofthe present invention;

FIG. 8 is a functional block diagram of a first alternative exemplaryremote management controller and video graphics controller of FIG. 2 inaccordance with an embodiment of the present invention;

FIGS. 9A and 9B are process flow diagrams illustrating the use of theremote management controller of FIG. 8 in accordance with an exemplaryembodiment of the present invention;

FIG. 10 is a functional block diagram of a second alternative exemplaryremote management controller and video graphics controller of FIG. 2 inaccordance with an embodiment of the present invention;

FIGS. 11A and 11B are process flow diagrams illustrating the use of theremote management controller of FIG. 10 in accordance with an exemplaryembodiment of the present invention;

FIG. 12 is a functional block diagram of a third alternative exemplaryremote management controller and video graphics controller of FIG. 2 inaccordance with an embodiment of the present invention;

FIGS. 13A, 13B and 13C are process flow diagrams illustrating the use ofthe remote management controller of FIG. 12 in accordance with anexemplary embodiment of the present invention;

FIG. 14 is a block diagram illustrating an exemplary DVR Encoder Engineof FIG. 12 in accordance with an embodiment of the present invention;and

FIG. 15 is a functional block diagram illustrating a fourth alternativeexemplary remote management controller and video graphics controller ofFIG. 2 in accordance with an embodiment of the present invention.

DESCRIPTION OF SPECIFIC EMBODIMENTS

One or more specific embodiments of the present invention will bedescribed below. In an effort to provide a concise description of theseembodiments, not all features of an actual implementation are describedin the specification. It should be appreciated that in the developmentof any such actual implementation, as in any engineering or designproject, numerous implementation-specific decisions may be made toachieve the developers' specific goals, such as compliance withsystem-related and business-related constraints, which may vary from oneimplementation to another. Moreover, it should be appreciated that sucha development effort might be complex and time consuming, but wouldnevertheless be a routine undertaking of design, fabrication, andmanufacture for those of ordinary skill having the benefit of thisdisclosure.

Embodiments of the present invention may provide a methodology forproviding data, such as graphical, textual and other data, to a remotemanagement system. A remote management controller may be employed toreceive graphical data from a video graphics controller that representsa video image. The video image may be divided into multiple slices witheach slice representing graphical data in a portion of the video image.A capture engine within the remote management controller may obtain thegraphical data for one of the slices. Then, the remote managementcontroller may analyze the designated slice for changes within thegraphical data. The changes in graphical data may be detected bycomparing a value for each of the blocks with a previously stored valuefor the block. Once analyzed, the remote management controller mayprocess the blocks of changed graphical data by compressing thegraphical data into compressed data, encoding the compressed data intoencoded data, encrypting the encoded data into processed data, andtransmitting the processed data. Thus, the present embodiments implementa remote management controller that efficiently provides graphical datato the remote management system.

Referring now to FIG. 1, a diagram of a managed system and a remotemanagement system in accordance with an exemplary embodiment of thepresent invention is illustrated. In this diagram, a managed system 2 isconnected to a remote management system 5 via a network N and/or amanaged network M. The managed system 2 includes a central processingunit (“CPU”) 3, which typically includes memory, communicationsinterface, and other circuitry as described more fully below. The CPU 3may be connected to a monitor 4. The remote management system 5 also mayinclude a CPU 6 and a monitor 8. The managed system 2 includes circuitryand software for capturing, analyzing, compressing and transmittingvideo images to the remote management system 5 independent of theoperating system (“OS”) of the managed system 2. Therefore, the presenttechniques may be useful for accessing, interacting, and/or monitoringthe managed system 2 from the remote management system 5 even if the OSof the managed system is malfunctioning or inoperative. Morespecifically, the video images available for display on the monitor 4are capable of being viewed on the monitor 8 independent from theoperation of the OS in the managed system 2. For example, out of bandvideo traffic that takes place without OS involvement, such as videotraffic that occurs during a power on self test, may be displayed on themonitor 8.

The network N and the management network M may be virtually any sort ofnetwork capable of transmitting data between two devices. While thenetworks N and M may include a local area network (“LAN”), a wide areanetwork (“WAN”), a metropolitan area network (“MAN”), a server areanetwork (“SAN”), a hardwired point-to-point connection, or a wirelessconnection, those skilled in the art will appreciate that the networks Nand M may assume other forms or may even provide network connectivitythrough the Internet. Further, the networks N and M may supportcommunication between the managed system 2 and the remote managementsystem 5, which may be dispersed geographically with respect to eachother. It should be understood that the networks N and M may be separatenetworks, segmented or delineated traffic on the same physical networks(such as VLAN), or a single network (e.g., where regular network trafficand management traffic take place as separate conversations on the samenetwork).

The managed system 2 and the remote management system 5 may be any of avariety of processing devices. For instance, the managed system 2 andthe remote management system 5 may be Hewlett-Packard computer systemsor servers. However, the principles discussed herein are believed to beapplicable to other system platforms or architectures, such as thosemanufactured by Apple, Sun, and/or International Business Machines(“IBM”). Additionally, the managed system 2 could be one architectureand the remote management system 5 could be another. For example, themanaged system 2 may be an x86 architecture computer running MicrosoftWindows NT OS, and the remote management system 5 could be a Sunworkstation running Solaris OS.

In operation, the graphical data of the video image is captured,analyzed, compressed, and transmitted to the remote management system 5by circuitry and software in the managed system 2. The remote managementsystem 5 includes software and/or hardware for receiving andinterpreting the transmitted graphical data from the managed system 2 toreproduce the video image on the monitor 8. The transmitted graphicaldata may be encoded to permit the remote management system 5 tointerpret the video data stream as further described in FIG. 2 below.

In FIG. 2, a block diagram of an exemplary embodiment of the managedsystem 2 of FIG. 1 in accordance with an exemplary embodiment of thepresent invention is illustrated. To provide processing power, themanaged system 2 includes one or more processors 10A-10N, which areherein referenced as processors 10. For example, the processors 10 maybe Pentium processors or other processors manufactured by IntelCorporation. Each of the processors 10 may operate applications andother programs, which may influence the video images presented from themanaged system 2.

The processors 10 may be coupled to a north bridge 12. The north bridge12 may include a memory controller for accessing a main memory 14 (e.g.,synchronous dynamic random access memory (“SDRAM”). The north bridge 12may be coupled to one or more I/O bridges 17 by a bus 13, such as a fastI/O bus. The north bridge 12 also may be coupled via an I/O link 19 to asouth bridge 18 which is coupled to a bus 16, such as a PCI or a PCI-Xbus. The bus 16 may also be coupled to one or more slots 20 forreceiving expansion cards.

The I/O bridge 17 may provide bridging for one or more expansion busses19, such as additional PCI or PCI-X buses, for example, which may becoupled to various peripheral devices. In this example, the bus 19 iscoupled to I/O slots 21 and to a SCSI controller 23, which, in turn, iscoupled to a plurality of disk drives 25.

The south bridge 18 may be an integrated multifunctional component, thatmay include a number of functions, such as, an enhanced direct memoryaccess (“DMA”) controller; interrupt controller; timer; integrated driveelectronics (“IDE”) controller for providing an IDE bus 22; a universalserial bus (“USB”) host controller for providing a universal serial bus24; a system read only memory (ROM) interface 26; a bus controller forproviding a low pin count bus (“LPC”) 27; and ACPI compliant powermanagement logic. The IDE bus 22 typically supports up to four IDEdevices, such as a hard disk drive 28 and a compact disk read onlymemory (“CD-ROM”) 30. The universal serial bus 24 also may be connectedto a pair of USB connectors 32 for communicating with USB devices (notshown).

The LPC bus 27 couples the south bridge 18 to a multifunctioninput/output (“I/O”) controller 34, while the system ROM interface 26couples a basic input/output system (“BIOS”) ROM 36 to the multifunctionI/O controller 34. The multifunction I/O controller 34, such as aNational Semiconductor PC87417, typically includes a number offunctions, such as a floppy disk drive controller for connecting to afloppy disk drive 42; a keyboard controller 38 for connecting to akeyboard 52 and a pointing device, such as a mouse 54; a serialcommunications controller for providing at least one serial port 44; anda parallel port interface for providing at least one parallel port 46.Alternative multifunction input/output (“I/O”) controllers aremanufactured by Standard Microsystems Corporation and WinBond, forexample.

A video graphics controller 58 and one or more communications devices,such as a network interface controller (“NIC”) 56, may be coupled to thebus 16. However, it should be noted that the video graphics controller58 and NIC 56 may be on different bus segments that are coupled todifferent I/O bridges. The video graphics controller 58 may be anintegrated video graphics controller, such as an ATI Radeon 7000, thatsupports a wide variety of memory configurations, color depths, andresolutions. Connected to the video graphics controller 58 is a framebuffer 62 (e.g. synchronous DRAM) for storing video graphics imageswritten by the processors 10. The video graphics controller 58 mayprovide the graphical data to the monitor 4 and/or provide the graphicaldata to another system for systems without monitors. It should beunderstood that the frame buffer 62 stores a copy of the screen ofgraphical data that is delivered to the monitor 4 by the video graphicscontroller 58. The video graphics controller 58 “draws” the entirescreen several times a second, e.g., 50-85 times a second, to create avisually persistent image that is visually responsive to the user. Thatis, when the processors render or otherwise change the contents of theframe buffer 62, the result is communicated to the monitor 4, and thusthe user, in a relatively short time period to facilitate full motionvideo animation on the monitor 4.

A remote management controller 60 may be coupled to the video graphicscontroller 58, or the video graphics controller 58 may be integrated inthe remote management controller 60. The remote management controller 60receives graphical data that represents a portion of a video image fromthe video graphics controller 58. For example, the remote managementcontroller 60 may be coupled to an output of the video graphicscontroller 58, to receive the digital video output (“DVO”) or analogoutputs signals for instance. The remote management controller 60analyzes the graphical data for changes, compresses the changedgraphical data into compressed data, encodes the compressed data intoencoded data, encrypts the encoded data into processed data, andtransmits the processed data. The processed data is transmitted by theNIC 56 in the remote management system 5 via the network N and/or amanagement network M. Although the remote management controller 60 isillustrated as part of the managed system 3, it may be separate from themanaged system 3 and the remote management system 6. For example, theremote management controller 60 may be used in a KVM switch.

The remote management controller 60, as described in more detail below,includes circuitry for obtaining graphical data from the video graphicscontroller 58. The remote management controller 60 may monitor thegraphical data from the video graphics controller 58 to analyze thegraphical data. For example, the remote management controller 60 maymonitor for changes in specific portions of the graphical data. Thechanges in the graphical data are processed by the remote managementcontroller 60 to compress and encode the changes for transmission toanother system, such as the remote management system 5.

In operation, the video graphics controller 58 provides video images inthe form of graphical data to the monitor 4, as noted above. Thisgraphical data may be provided in a variety of different resolutions,which may depend upon the settings or configuration parameters withinthe managed system 2 and remote management system 5. The resolution isbased on a combination of the horizontal pixels and vertical pixelsutilized to present the video image. This resolution may be defined by astandard, such as Video Graphics Array (“VGA”), super VGA (“SVGA”),and/or extended VGA (“EVGA”), or may be referenced by the number ofpixels in each row and column utilized to present the graphical data,such as 1280×1024 or 1600×1200. For example, each pixel in the videoimage may represent 8 to 10 bits of color information for each CRT gun,which relates to colors, such as red, green, and blue. Accordingly, aresolution of 1600×1200 utilizes about 1.92 million storage elements forthe individual pixels of the video image, which may be stored in theframe buffer 62 and transmitted as the graphical data to the monitor 4.Because the graphical data presented to the monitor 4 may be refreshedbetween 60-85 times per second to maintain the video images on themonitor 4, the graphical data may consume a large amount of storageelements and bandwidth.

Because of the large amounts of graphical data associated with videoimage, the capture and transmission of real-time graphical data to theremote management system 5 may be problematic. Accordingly, someembodiments of the present technique can throttle the capture of thegraphical data to the available network bandwidth. As discussed below,the present embodiments divide the capture of graphical data into atiming dependent process and a non-timing dependent process, which maybe mutually exclusive. The timing dependent process captures streaminggraphical data in real-time or synchronously and stores it in a capturebuffer. Once a slice has been captured, a non-timing dependent orasynchronous process analyzes the captured graphical data. Uponcompletion of the non-timing dependent process, the timing dependentprocess resumes and captures the next available slice of streaminggraphical data. As a result, the timing dependent process of presentingthe graphical data to the monitor 4 is separated from the non-timingdependent analysis of the graphical data to efficiently provide thegraphical data to the remote management system 5.

To provide the graphical data to the remote management system 5 in anefficient manner, the graphical data for a video image may be brokeninto slices, which are discussed below in FIG. 6. These slices providesmaller portions of the graphical data that may be analyzed andprocessed individually. The slices may be further divided into blocks ofgraphical data. The changed blocks of graphical data are utilized tomaintain the copy of the frame buffer 62, which may be referenced as avirtual screen buffer, as discussed in FIG. 8. To detect the changedblocks, each block is compared with the data previously sent to theremote management system 5. Once a changed block is detected, it isprocessed by compressing the changed graphical data to form compresseddata, encoding the compressed data to form encoded data, encrypting theencoded data to form processed data, and transmitting the processeddata.

However, if the graphical data has many different blocks with changes,the processing and transmission of the changed graphical data may not becompleted before the next slice is provided from the video graphicscontroller 58. This time dependency on the analysis of the slice, whichis a portion of the video image, may result in the next slice processedand transmitted to remote management system 5 not being the nextsequential slice of the video image being presented by the videographics controller 58. Accordingly, the remote management controller 60may automatically and dynamically interlace the captured graphical databased upon the amount of time for the analysis of the slice tosynchronize the copy of the frame buffer 62. Therefore, the slices maybe selected as every other slice or every third slice. Conversely, if nochanged blocks are detected or if the captured slice is otherwiseprocessed in time, then each slice of the video image may be capturedand analyzed in order. The graphical data is captured proportionally tohow it is consumed, allowing the presentation rate to adjust to factors,such as data compressibility, network congestion, quality of service,and/or available network bandwidth. Furthermore, to verify that eachslice is processed, the remote management controller 60 tracks theslices that have previously been captured to insure that priority isgiven to slices that have not recently been captured. This insures thateach slice of the video image is eventually captured, analyzed, andsynchronized with the frame buffer 62. The tracking of the slices isdiscussed in greater detail below.

With the above summary in mind, different embodiments that efficientlyprovide the remote management system 5 with graphical data from themanaged system 2 are described below. As generally illustrated in FIG.3, the remote management controller 60 is shown with the variouscomponents that may be utilized to monitor and interact with the managedsystem 2. In the first embodiment illustrated in FIG. 4, the remotemanagement controller 60 includes a capture engine, along with theprocessor 64 for analyzing the graphical data. In the second embodimentillustrated in FIG. 8, the capture engine of the remote managementcontroller 60 detects changes in the blocks of graphical data andincludes a DMA engine to move the changed graphical data without theintervention of the processor 64, and a virtual screen buffer maintainsa copy of the frame buffer 62 in memory. In the third embodimentillustrated in FIG. 10, the remote management controller 60 includes achange table to accelerate the processing of captured data. The changetable identifies areas of the frame buffer 62 that have changed andthat, thus, will be updated on the remote management system 5.Additionally, the change table provides a synchronization mechanism forshared resources between the digital video redirection module 92 and theprocessor 64. In the fourth embodiment illustrated in FIG. 12, theremote management controller 60 includes a digital video redirection(“DVR”) encoder engine that identifies and processes areas of the framebuffer 62 that have changed, eliminating the maintenance of any shadowcopy of the frame buffer 62 on the remote management controller 60. Inthe fifth embodiment illustrated in FIG. 15, the remote managementcontroller 60 includes a capture engine and DVR encoder engine that areconfigured to process multiple slices of graphical data simultaneously.

Turning to FIG. 3, a functional block diagram of an exemplary embodimentof a remote management controller 60 of FIG. 2 is illustrated. All or aportion of the remote management controller 60 may be implemented in asingle application specific integrated circuit (“ASIC”). Alternatively,the remote management controller 60 may be implemented in a plurality ofintegrated circuits or discrete components. Those skilled in the artwill appreciate that implementation details, such as deciding whichfunctional aspects of remote management controller 60 are implemented ina single ASIC or different ASICs, are matters of design choice.

For purposes of describing this embodiment clearly, the remainder ofthis description is written assuming that the remote managementcontroller 60 is implemented using a single ASIC, which may beincorporated into the motherboard of the managed system 2. Additionally,any remote management system 5 that may be connected directly orindirectly to the managed system 2 may establish communication with theremote management controller 60 through its network connection as ismore fully described below. Users may further interface with the remotemanagement controller 60 through additional communications interfacessuch as a modem.

The remote management controller 60 may be implemented so that it ispowered and capable of operation regardless of whether the managedsystem 2 is powered up or online. Powering the remote managementcontroller 60 regardless of whether the managed system 2 is turned onallows the remote management controller 60 to monitor, analyze andpotentially intervene to correct a wide range of system problems thatmay befall the managed system 2.

The remote management controller 60 may include various logic componentsto provide interaction with the managed system 2. For instance, anInput/Output processor 64 may provide general control and functions as amanagement processor for the remote management controller 60. Theprocessor 64 may be implemented as a 32-bit RISC processor, but otherprocessor implementations may be employed as well. The processor 64 isshown in this example as being operatively coupled to a timer module 66and an interrupt controller 68 via a bus 70.

In this exemplary embodiment, a memory controller 72 is operativelycoupled to an internal local bus 74. The memory controller 72 isoperatively coupled to dedicated memory, such as SDRAM 76, NVRAM 79, orFlash memory 78. However, other types of memory may also be utilized,which may include ROM, or any other appropriate type of memory. Indeed,in the illustrated embodiment, code executed by the processor 64 istypically stored in the SDRAM 76.

The processor 64 may be operatively coupled to the other functionalmodules (and possibly many sub-modules) of the remote managementcontroller 60 via the internal local bus 74. Those of ordinary skill inthe field will appreciate that the internal local bus 74 exists to allowcommunication between and among the logical components of the remotemanagement controller 60. For instance, an address translation andbridging (“ATB”) unit 80 is operatively coupled to the internal localbus 74 and to a PCI bus 16, which is discussed above. The ATB unit 80provides access to the PCI bus 16 for the different logic components ofthe remote management controller 60. Also, a sideband NIC interface 90may be utilized to communicate with the NIC 56 so that managementtraffic can flow through the network N.

Further, the remote management controller 60 may include communicationinterfaces that can be employed to establish out-of-band communicationsessions for the remote management controller 60. One such communicationinterface is a UART interface module 82, which is operatively coupled tothe internal local bus 74. The exemplary UART interface module 82comprises two standard 16550 UARTs, each of which may provide a separateserial communication interface via an RS-232 interface or theIntelligent Chassis Management Bus (“ICMB”) interface. Another suchcommunication interface is a USB interface 84, which is operativelycoupled to the internal local bus 74. The USB interface 84 may becoupled to a USB host controller (not shown). Further, a NetworkInterface Controller (“NIC”) 86, which is operatively coupled to theinternal local bus 74, provides another external communication interfacebetween the remote management controller 60 and remote systems coupledto the Management Network M, which is discussed above. The NIC 86 mayinclude a MAC (“Media Access Controller”), inbound and outbound first-infirst-out buffers (“FIFOs”), a DMA engine to transfer packetsautomatically to and from memory, and an external PHY and typicalmagnetics and connectors to couple the physical connection (“PHY”) tothe wire that serves as the transmission media.

To control and monitor functions in the managed system 2, a slaveinstrumentation module 88 may be utilized. The slave instrumentationmodule 88 may include an automatic server recovery (“ASR”) controllerthat operates to respond automatically to catastrophic failures of themanaged system 2 and a general purpose input/output module (“GPIO”) thatprovides a versatile communication interface. A JTAG master may also beutilized to perform a wide range of control functions on the managedsystem 2. Further, an I²C master may be utilized to control a pluralityof independent I²C serial channels. The slave instrumentation module 88may also include system support logic to provide a variety ofhousekeeping and security functions for the managed system 2, such asproviding the system identification (“ID”), flash ROM support, errorcorrection code (“ECC”) support, hot spare boot support, system postmonitor support, floppy write protect, SMI base security measures, openhood detection and the like.

The remote management controller 60 is adapted to receive outputs fromthe video graphics controller 58. As described in detail below, thedigital video redirection module 92 may be configured to receive outputsignals from the video graphics controller 58, which may be utilized toprovide the video images to the remote management system 5. The digitalvideo redirection module 92 may be coupled to one of the outputs, e.g.,the DVO 130, of the video graphics controller 58. The components of thedigital video redirection module 92 may modify these output signals toprovide the processed graphical data to the remote management system 5via the NIC 86. Also, the digital video redirection module 92 may becoupled to the interrupt handler 68 via a bus 94 to interact with theprocessor 64 to process the graphical data.

FIG. 4 illustrates a functional block diagram of an exemplary embodimentof a remote management controller 60A and video graphics controller 58of FIG. 2 constructed in accordance with the first embodiment of thepresent invention. The video graphics controller 58 may provide outputsignals to the monitor 4 and to the remote management controller 60A.The output signals may be analog output signals 126, DVI signals 128, orDVO signals 130 that represent graphical data associated with the videoimages. For the purposes of the present exemplary embodiments, however,they will be described as utilizing data from the DVO 130 of the videographics controller 58.

The video graphics controller 58 may provide graphical data, which isstored in the frame buffer 62, to the monitor 4 and to the remotemanagement controller 60A. The video graphics controller 58 may includea GRX Host Interface and render engine 116 that couples the videographics controller 58 to a system bus, such as a PCI-type bus 16. Italso may include a 2-D and/or 3-D rendering engine. The memorycontroller 120 receives data from the GRX Host Interface and renderingengine 116 and stores such data in the frame buffer 62. The displayengine or sequencer 118 is the portion of the video graphics controller58 that takes graphical data from the frame buffer 62, converts the datainto a displayable RGB value, and delivers such converted data to one ormore of the output interfaces of the video graphics controller 58. Thedata stored in the frame buffer 62 may include color index entries, RGBentries, or other color space entries, such as YUV, depending on theselected video mode. Control registers in the GRX Host Interface andrender engine 116 provide the sequencer 118 with information so that itmay interpret such data, including formatting and resolution of thedata.

To provide the graphical data to the monitor 4 and/or the remotemanagement controller 60A, the video graphics controller 58 may utilizedifferent nodes 126, 128 and 130 to provide different types of outputsignals. In this embodiment, the remote management controller 60A iscoupled to the DVO node 130, although it may be coupled to other nodesas described below. The memory controller 120 provides digital outputsignals to the sequencer 118, which is coupled to other components toconvert the digital output signals into different types of outputsignals that are provided on the nodes 126, 128 and 130. For instance,the digital-to-analog converter (“DAC”) 122, which converts the digitaloutput signals into analog output signals, may provide analog outputsignals via the node 126. For the remote management controller 60A toreceive these signals from node 126, an analog to digital converter (notshown) may be utilized to convert the analog output signals into digitaloutput signals suitable for processing by the remote managementcontroller 60A. Similarly, the DVI component 124 may provide DVI outputsignals, which are serial digital output signals, via the node 128. Forthe remote management controller 60A to receive these serial digitaloutput signals from node 128, a DVI receiver (not shown) may be utilizedto convert the serial digital output signals into parallel digitalsignals suitable for processing by the remote management controller 60A.Further, direct digital video output signals (“DVO”), which are paralleldigital output signals, may be provided directly from the memorycontroller 120 via the node 130, and the remote management controller60A may receive these signals directly from the node 130.

Regardless of how the graphical data is transmitted, the remotemanagement controller 60A may include various components that processthe graphical data provided in the output signals from the videographics controller 58. For instance, the remote management controller60A may include a digital video redirection module 92A, a processor 64,memory controller 72, memory 76, and NIC 86. The digital videoredirection module 92A may include a capture engine 132, a capturebuffer 148, and a cyclical redundancy check (“CRC”) table 150 that maybe utilized to capture the output signals from the video graphicscontroller 58. In the timing dependent process, the capture engine 132monitors and captures a portion, or “slice,” (e.g., several blocks) ofthe video stream of graphical data from the video graphics controller58. Then, in the non-timing dependent process, the processor 64 mayanalyze and process the graphical data. Thus, the timing dependentprocess of capturing the graphical data is separated from the analysisof the graphical data to efficiently provide the graphical data to theremote management system 5.

To capture the real-time video stream, the capture engine 132 isconnected to the video graphics controller 58. The capture engine 132,which is discussed further in FIG. 7, obtains specific slices ofgraphical data from the video graphics controller 58 and interfaces withthe capture buffer 148 and the capture cyclic redundancy check (“CRC”)table 150. The slices of graphical data may include one or morescanlines, which are rows of horizontal pixels grouped together to forma slice of the video image, as discussed further below in regard to FIG.6. The capture engine 132 may monitor the video stream from the videographics controller 58. For example, the capture engine 132, whenenabled, may continuously monitor the video output signals. When thecapture engine 132 is instructed to capture the next slice or anotherdesignated slice, it uses its monitored position to determine theapproximate slice boundary to begin capturing data. Because thegraphical data is continuously being updated by the video graphicscontroller 58, the capture engine can capture the designated sliceduring a future refresh operation, should the monitored position bebeyond the starting point of the designated slice. The video stream fromthe video graphics controller 58 includes output signals that indicatethe horizontal and vertical position of graphical data within the framebuffer 62. Specifically, the horizontal synchronization signal HSYNC andvertical synchronization signal VSYNC, along with a pixel clock signalPixelClk may be provided from the video graphics controller 58, asdiscussed in FIG. 7. Additionally, a display enable signal DISP_EN maybe provided to delineate actual pixel data from border, overscan, andretrace areas of the image displayed by the video graphics controller58. By examining these signals, the capture engine 132 determines theslice or actual location in the frame buffer 62 being provided from thevideo graphics controller 58. Further, the capture engine 132 may samplethe RGB value of the pixel and perform a bit-reduction on this graphicaldata. The bit reduction may include stripping the least significant bitsof each color gun from the pixel color value. As such, the captureengine 132 may obtain specific slices of the video stream from the videographics controller 58 and store the graphical data in the capturebuffer 148 through the use of a write operation.

Then, the capture engine 132 analyzes the individual pixels or groups ofpixels within the captured slice, which may be referred to as blocks.The analysis may include determining whether the blocks have changed bycalculating a value for each block, so that the processor 64 can comparethe calculated values with previously stored values to detect anychanges in the blocks. The values may be digital signatures generatedfor each block of the designated slice for purposes of detecting changesto that region. The digital signatures may be calculated simultaneouslywith the receipt of the graphical data or after the graphical data isstored within capture buffer 148. The capture buffer 148 may be a memorythat is dedicated to the capture engine 132 or may be a portion of thememory 76. A capture CRC table 150 may be utilized to store calculatedCRC values that correspond to digital signatures of the respectivegraphical data that represents a pixel or block of pixels. The data inthe CRC table 150 represents the individual blocks in the capture buffer148. The size of the CRC table 150 may be “n” blocks by the errorcorrection code word length, which may be represented by 128×32 bits or4096 bits of data for example. The use of the CRC values, or othersimilar digital signature values, reduces the memory utilized to storethe previous contents of the blocks of the video frame buffer 62. Forexample, the processor 64 may maintain a complete display CRC table 139in the memory 76 corresponding to all blocks of the frame buffer 62. Theprocessor 64 may compare values from the capture CRC table 150 againstpreviously recorded values stored within the memory 76 to identifyblocks in the capture buffer 148 that have been modified since the lasttime the slice was captured. The capture CRC table 150 may be stored inrandom access memory, such as static random access memory (“SRAM”),dynamic random access memory (“DRAM”), or other suitable memories.

The processor 64 may be a microprocessor that is utilized by the remotemanagement controller 60A to manage the processing of graphical datathat is transmitted to a remote management system 5. The processor 64utilizes the memory controller 72 to access the code and data within thememory 76. The memory 76 may include code, such as management code 138,that is executed by the processor 64 to track the slices captured by thecapture engine 132. The management code 138 may notify the captureengine 132 regarding the designated slice of the graphical data that hasnot been analyzed or when the previous slice has been processed. Themanagement code 138 may track slices that have previously been capturedto insure that priority is given to slices that have not recently beencaptured. This insures that each of the slices of the frame buffer 62are eventually captured, analyzed, and synchronized with respect to theshadow copy or duplicate copy of the frame buffer 62. Once a previousslice has been processed, the capture engine 132 may access anotherdesignated slice. The next designated slice may be the next sliceboundary to be clocked out of the video graphics controller 58 or aspecific slice that has not been recently captured. As such, the captureengine 132 may bypass other slices to access the designated slice.

The memory 76 may also include other code, such as compression code 140,encoder code 142, and/or encryption code 144, that is executed by theprocessor 64 to process the slice or blocks of graphical data beforetransmission to the remote management system 5. For instance, thecompression code 140 may utilize the capture CRC table 150 along withany suitable algorithms or techniques to compress specific portions ofgraphical data, such as blocks or individual pixels, to form compresseddata. For example, the compressed data may be formed using techniquesdescribed in U.S. Pat. No. 6,774,904. The compression code 140 may alsoutilize Joint Photographic Experts Group (“JPEG”), Motion PictureExperts Group (“MPEG”), or any other suitable compression technique.Similarly, the encoder code 142 may format the compressed data accordingto a standard format to form encoded data. The encryption code 144 mayencrypt the encoded data using various encryption techniques to formprocessed data. For instance, the encryption code 144 may utilize publicand private key pairs, a cryptographic hash, symmetric encryption, andasymmetric encryption techniques. It should be noted that if these stepsare performed, they may be performed sequentially or in parallel.

Once the code 140, 142 and/or 144 has been utilized to process thegraphical data, the transmission code 146 is utilized by the processor64 to transmit the processed data to the remote management system 5. Thetransmission code 146 may prepare the processed data for transmission toanother system over different communication media. For instance, thetransmission code 146 may interact with the NIC 86 to manage thetransmission of the rocessed data or may utilize a connection 57 withthe NIC 56 as shown in FIG. 2, for example. Regardless, the processor 64utilizes the codes 138, 140, 142, 144 and 146 to provide the specificportions of the designated slice to other systems, such as the remotemanagement system 5.

Beneficially, the first embodiment enables video data to be efficientlyand inexpensively captured. Since the capture buffer 148 only holds aportion of the visible display, it can be advantageously smaller. Forexample, if the capture buffer is constructed to hold 16 scan lines, itwill only contain 20k pixels instead of 1.3M pixels for an exampleresolution of 1280×1024. Those skilled in the art will appreciate thatthis technique facilitates the capture buffer 148 to be constructedinexpensively with extremely fast memory, such as SRAM. This allows thecapture process to proceed at the full video presentation rate. Bydecoupling the capture and data processing steps, graphical data can beprocessed and transmitted at a different rate than it is captured. Thus,the redirection process may dynamically adjust to factors such asavailable network bandwidth and processing speed. The efficiency ofthese factors may determine the frequency at which additional slices maybe captured and consequently the frequency of complete synchronizedimage frames available at the remote management system 5.

In addition, the use of the remote management controller 60A enhancesthe system's scalability. For instance, the remote management controller60A may receive graphical data from any of the output ports 126, 128 and130 of the video graphics controller 58 and is not dependent on specificvideo controllers and their operation through their system interconnectof buses. Thus, the video data may be captured in an industry standardand industry consistent fashion by utilizing timing waveformsestablished in video monitor technologies. In other words, because theremote management controller 60A is not coupled to the system bus, e.g.,the PCI-type bus, at the input of the video graphics controller 58, theremote management controller 60A is not dependent upon certain systemspecific constraints. These constraints may include available system busbandwidth, system bus lockup conditions, bus reset issues, and the like.

FIG. 5 is a process flow diagram illustrating the exemplary use of theremote management controller 60A of FIG. 4 in accordance with the firstembodiment of the present invention. The process flow diagram isgenerally referred to by reference numeral 400. As shown in FIG. 5, theremote management controller 60A may utilize the capture engine 132,processor 64, memory controller 72, memory 76, and NIC 86 to analyzedesignated slices of graphical data provided from the video graphicscontroller 58.

The process begins at block 402. At block 404, management code 138 mayindicate to the capture engine 132 that a designated slice of the framebuffer may be captured. The indication may be a signal that notifies thecapture engine 132 to analyze a specific slice or the next availableslice of the frame buffer 62. For example, the capture engine 132 mayutilize the horizontal synchronization signal (HSYNC), verticalsynchronization signal (VSYNC), and pixel clock signal (PixelClk) fromthe video graphics controller 58 to determine the starting location forthe next slice to be scanned. At block 406, the capture engine 132 mayaccess the designated slice. Once the capture engine 132 has located thedesignated slice, the capture engine 132 may store the designated slicein the capture buffer 148, as shown in block 408. Then, the captureengine 132 calculates the CRC values for each block in the designatedslice, as shown in block 410. The CRC values may be calculated usingvarious mathematical techniques used to generate a digital signature,check for changes, or other suitable method. These CRC values may bestored in the capture CRC table 150, as shown in block 412. Once theCRCs values are stored for each of the blocks in the designated slice,the capture engine 132 may notify the processor 64 that the captureengine 132 has completed its capture and analysis of the designatedslice, as shown in block 414.

Once the capture engine 132 has completed its capture and analysis ofthe designated slice, the processor 64 may process the capturedgraphical data for possible transmission to the remote management system5, as shown in blocks 416-436. It should be understood that theprocessor 64 does not process unmodified blocks. At blocks 416 and 418,the processor 64 reads the CRC values stored in the capture CRC table150 and compares the calculated CRC values with previously calculatedvalues stored in a complete display CRC table 139 in the memory 76. Ifthe CRC values match, the block has not changed, so the processor 64repeats the process for the remaining blocks in the slice, asillustrated in blocks 416-420. However, if the CRC comparison indicatesa change, the processor 64 reads the modified graphical data of thecapture buffer 148 to prepare it to be transferred to the remotemanagement system 5, as set forth in block 422. The processor 64 mayprocess the block in various ways to prepare it for transmission. Forexample, the processor 64 may compress the blocks of the designatedslice using the compression code 140, as shown in block 424. At block426, the processor 64 may encode the compressed data using the encodercode 142. It should be noted that the encoding routine may place thegraphical data into a predetermined format that include constructs forcompression. As a result, the compression and encoding may be performedby the same code. At block 428, the processor 64 may encrypt the encodeddata via the encryption code 144 to form the processed data. Theprocessed data, whether encrypted or not, may be prepared fortransmission using the transmission code 146, as shown in block 430 andthe display CRC table 139 may be updated as shown in block 432. With thegraphical data modified into processed data, the management code 138 maydetermine if the connection to the remote management system 5 isinactive, as shown in block 434. If the connection is active, themanagement code 138 may indicate another slice to be accessed by thecapture engine 132, as shown in block 404. However, if the connection isinactive, the process may end at block 436.

Prior to continuing this discussion, it has been mentioned above thatthe graphical data that represents the video image may be divided intovarious slices. FIG. 6 is an exemplary embodiment of the video imagethat may be divided into slices and blocks in accordance withembodiments of the present invention. In this diagram, a video image500, such as the one created from the contents of the frame buffer 62for presentation to the monitor 4, may be divided into different areas,such as viewable areas and non-viewable areas. The viewable areas andnon-viewable areas may be utilized in analyzing the video image 500.

The viewable areas and non-viewable areas may be defined based upon theoverlap between the different sections of the output from the videographics controller 58. For instance, with regard to the vertical side,the video image 500 may include a first vertical unviewable section 506,a vertical viewable section 508, and a second vertical unviewablesection 510. Similarly, with regard to the horizontal side, the videoimage 500 may include a first horizontal unviewable section 512, ahorizontal viewable section 514, and a second horizontal unviewablesection 516. The viewable sections 508 and 514 overlap to define aviewable area 518 of the video image 500. The viewable area 518 isutilized to present the graphical data from the applications,processors, or other sources, through the use of the color bits that areassociated with each of the respective pixels in the viewable area 518.The unviewable sections 506, 510, 512 and 516 overlap to define anunviewable area 520 of the video image 500, which forms a border aroundthe viewable area 518. The unviewable area 520 may include darkenedportions of the video image 500 that are not presented to a user.

Within the viewable area 518 of the video image 500, the pixels may bedivided into slices 502 ₀-502 _(N) and blocks 504 ₀₀-504 _(NM) toprovide definable areas in the video image 500. For example, thehorizontal rows of pixels, which may be referenced as scanlines, aregrouped together into slices 502 ₀-502 _(N). The value of N isdetermined by dividing the number of horizontal rows of pixels by thenumber of scanlines defined in each slice 502 ₀-502 _(N). Further, eachof the slices 502 ₀-502 _(N) may be divided into groups of pixels thatare references as blocks 504 ₀₀-504 _(NM). The blocks 504 ₀₀-504 _(NM)may be grouped based upon a specific pixel, a specific pixel along withone or more adjacent pixels, or a specific group of pixels. Thisdivision of the pixels into blocks 504 ₀₀-504 _(NM) and slices 502₀₀-502 _(NM) provides definable portions of the video image 500 that maybe analyzed for features, such as changes or other characteristics.

For instance, if the viewable area 518 of video image 500 is to bedisplayed at a resolution of 1600×1200, then the vertical viewablesection 508 is equal to 1200 rows of pixels and the horizontal viewablesection 514 is equal to 1600 columns of pixels, which provides aviewable area 518 of 1600 pixels by 1200 pixels. To divide the imageinto manageable portions, the slices 502 ₀-502 _(N) may include 16horizontal rows of pixels, while each of the blocks 504 ₀₀-504 _(NM) mayinclude 16 vertical rows and 16 horizontal rows of pixels. Accordingly,75 slices 502 ₀-502 _(N) may be formed for the viewable area 518 and 100blocks 504 ₀₀-504 _(NM) may be formed in each of the designated slices502 ₀-502 _(N). Alternatively, for a viewable area 518 of 1280 pixels by1024 pixels, the slices 502 ₀-502 _(N) may include 16 vertical rows ofpixels, while the blocks 504 ₀₀-504 _(NM) may be 16 vertical rows by 16horizontal rows of pixels. In this configuration, 64 slices 502 ₀-502_(N) may be formed in the viewable area 518 and 80 blocks 504 ₀₀-504_(NM) may be formed in each of the designated slices 502 ₀-502 _(N).Accordingly, it should be noted that the size of the slices 502 ₀-502_(N) and blocks 504 ₀₀-504 _(NM) along with the resolution may beadjusted or modified as a matter of design choice.

Beneficially, the segmentation of the viewable area 518 of the videoimage 500 into slices 502 ₀-502 _(N) and blocks 504 ₀₀-504 _(NM) dividesthe viewable area 518 into smaller portions that may be efficientlyanalyzed for changes. That is, the changes in the graphical dataassociated with each of the blocks 504 ₀₀-504 _(NM) may be analyzed todetect changes in the video image 500. The size of the blocks 504 ₀₀-504_(NM) may be adjusted to depend on the processing power of the captureengine 132, the number of capture engines 132 utilized within the remotemanagement controller 60A, and/or the amount of capture bufferavailable.

FIG. 7 illustrates a functional block diagram of an exemplary embodimentof a capture engine 132 of FIG. 4 constructed in accordance with anembodiment of the present invention. In this embodiment of the captureengine 132, the capture control block 610 manages the incoming signals,control signals, capturing of graphical data, and clocking for thecapture engine 132. In particular, the capture control block 610 maycontinuously monitor the output signals from the video graphicscontroller 58 based on various control signals. Also, the capturecontrol block 610 generates the address/control signals and the clocksignals to the capture buffer 148 and the CRC table 150. In addition,the capture control block 610 manages the communication of the capturedone signal CaptureDone to indicate that the capture engine 132 hascompleted analysis of the graphical data. The capture state machine 614receives the capture next slice signal CaptureNext to indicate that thecapture engine 132 is to process the next slice of graphical data.

The output signals from the video graphics controller 58 may be receivedby the synchronization flip-flops 602. The synchronization flip-flops602 are used to sample the incoming signals to manage the timing of thesignals for the internal logic of the capture engine 132. These signalsmay include red color signals RED, blue color signals BLUE, green colorsignals GREEN, a horizontal synchronization signal HSYNC, a verticalsynchronization signal VSYNC, pixel clock signal PixelClk, and displayenable signal DISP_EN. The red color signals RED, blue color signalsBLUE and green color signals GREEN may be 8 bits of color data that areassociated with each of the respective colors. Further, the horizontalsynchronization signal HSYNC may be associated with the horizontalaspects of the graphical data, while the vertical synchronization signalVSYNC may be associated with the vertical aspects of the graphical data.The pixel clock signal PixelClk may provide a clock signal to thesynchronization flip-flops 602, while the display enable signal DISP_ENmay indicate if the remote management system is being provided signalsin the display area 518.

From the synchronization flip-flops 602, the color signals, whichinclude the red color signals RED, blue color signals BLUE and greencolor signals GREEN, are provided to the pixel decimation module 604.The pixel decimation module 604 may keep the upper 4 bits of each of thecolor signals for further processing within the capture engine 132.However, the lower 4 bits may be truncated, rounded, or dropped toreduce the amount of graphical data that is processed and transmitted.It should be noted that these lower bits may be utilized if more coloraccuracy is desired. Then, the truncated signals are combined togetherand provided to a pixel accumulator 606.

The pixel accumulator 606 groups the pixels and provides the truncatedcolor signals to the capture buffer 148 and the CRC generator 618. Forinstance, the pixel accumulator 606 may combine the even and odd pixelsto double the data width of the accumulated pixel data. The pixelaccumulator 606, which may be a set of flip-flops that alternatelycapture the incoming truncated color signals into an “even” and “odd”set of flip-flops. As a result, the output data of the pixel accumulator606, which is accumulated signals, is twice the bus width of theincoming data set and may be sent to capture buffer 148 and CRCgenerator 616 at half of the speed of the pixel clock signal PixelClk.The CRC generator 618 performs a 32-bit CRC of the accumulated signals.To calculate the CRC of a block, the CRC generator 618 saves andrestores intermediate data represented by the accumulated signals to theCRC table 150 as each block is addressed. When the entire slice has beenscanned, the capture CRC table 150 contains a complete CRC for eachblock within the slice. The coordination of the data being stored in thecapture CRC table 150 and the capture buffer 148 is further explainedbelow.

The control signals from the synchronization flip-flops 602 are providedto the waveform monitor 608. The waveform monitor 608 analyzes theincoming signals, such as the horizontal synchronization signal HSYNC,vertical synchronization signal VSYNC, and DISP_EN signals, to determinethe total horizontal width, total vertical width, current horizontalposition, current vertical position, etc. The waveform monitor 608passes this information to the capture control block 610 for use ingenerating the memory clock signal RAMClk and determining when to starta capture of the output signals from the video graphics controller.Specifically, the horizontal synchronization signal HSYNC and verticalsynchronization signal VSYNC enable the capture control block 610 tomonitor the current horizontal position and current vertical position tostart and stop the capture of the incoming signals.

As another source of control signals, the capture control block 610 iscoupled to the configuration control registers 612 and capture statemachine 614. Accordingly, the configuration control register 612, whichis coupled to a register read/write interface, provides controlinformation, such as horizontal synchronization signal HSYNC polarityand vertical synchronization signal VSYNC polarity, to the capturecontrol block 610. From the capture state machine 614, the capturecontrol block 610 may receive an arming signal, such as a capture nextslice signal CaptureNext. The arming signal is provided to the capturestate machine 614 once an indication is received from the processor tocapture the next slice. The capture next slice signal CaptureNext mayindicate that the encoder has completed processing the previouslycaptured slice and the capture engine 132 should begin capturing thenext available slice. As such, the configuration control registers 612and capture state machine 614 may provide additional control informationthat is utilized by the capture control block 610 to process thegraphical data.

To determine the previously captured slices, the capture control block610 may access the previous scan register 616. The previous scanregister 616 may maintain a list of previously captured slices that isutilized to insure that each of the slices for an image is capturedbefore other slices are scanned again. For instance, the previous scanregister 616 may be initially filled with “0” to indicate that none ofthe slices have been captured. As slices are scanned, the correspondingbit position is set with a “1” in the previous scan register 616. Whenthe arming signal, such as the capture next slice signal CaptureNext, isreceived by the capture control block 610, the capture control block 610may examine the registers of the previous scan register 616 to determinewhich slices have not been scanned. Then, once each of the slices hasbeen scanned, the previous scan register 616 may again be filled with“0's.”

The capture control block 610 may coordinate data being stored andprovide a clock signal to the capture CRC table 150 and the capturebuffer 148. For instance, the capture control block 610 may coordinatethe data being stored in the capture CRC table 150 and the capturebuffer 148 by providing address/control signals that are based on thecontrol signals received from the waveform monitor 608, configurationcontrol register 612, and capture state machine 614. Further, thecapture control block 610 may provide the memory clock signal RAMClkbased on this same information. The capture control block 610 mayprovide a clock signal that is 1/n, where n=1, 2, or 4, for example, ofthe speed of the pixel clock signal PixelClk to match the data beingprovided from the pixel accumulator 606. The capture control block 610divides the incoming pixel clock signal PixelClk by n and phase alignsthe output of the memory clock signal RAMClk to match the assertion ofdisplay enable signal DISP_EN. If n=2, this insures that the first pixelin every horizontal row is an “odd” pixel.

FIG. 8 illustrates a functional block diagram of a first alternativeexemplary embodiment of a remote management controller 60B and videographics controller 58 of FIG. 2. In the diagram 700, the remotemanagement controller 60B may include additional components to handlechanges in the graphical data being provided from the video graphicscontroller 58. For example, the digital video redirection module 92B mayinclude a capture engine 132, a capture buffer 148, a capture CRC table150, and a DMA engine 704. The DMA engine 704 may be utilized to movethe changed graphical data to a virtual screen buffer (“VSB”) 708. Byutilizing the DMA engine 704 and the VSB 708, the remote managementcontroller 60B may further reduce the interaction with the processor 64to move graphical data.

Accordingly, various code and components of the present embodiment mayoperate in a similar manner to those discussed above in FIG. 4. Forinstance, the video graphics controller 58 may include variouscomponents 116, 118, 120, 122 and 124, and nodes 126, 128 and 130, whichmay operate, as discussed above with regard to FIG. 4. Also, the remotemanagement controller 60B may include the capture engine 132, memorycontroller 72, various code 138, 140, 142, 144, and 146 in the memory76, the processor 64, and the capture buffer 148 and capture CRC table150, which may operate as discussed above with regard to FIG. 4.

In this embodiment, the capture engine 132 may access a designatedslice, which may be one of the slices 502 ₀-502 _(N) of FIG. 6, toanalyze the blocks, which may be one of the blocks 504 ₀₀-504 _(NM) ofFIG. 6, within the designated slice for changes in the graphical data.These changes may be stored in the virtual screen buffer 708. Then, thescanner code 706 may detect changes in the virtual screen buffer 708 todetermine the change in the graphical data that is to be transmitted tothe remote management system 5.

In the remote management controller 60B, the capture engine 132 mayanalyze the designated slice for changes in the different blocks withinthe designated slice. The capture engine 132 may analyze the designatedslice by comparing the CRC values for the designated slice in thecapture buffer 148 against the previously stored CRC values in the VSBCRC table 710. If the block within the capture buffer 148 has changed,the capture engine 132 may notify the DMA engine 704 which block haschanged. The notification may include passing a block pointer to the DMAengine that is associated with the block that has changed. The DMAengine 704 may transfer graphical data from the capture buffer 148 tothe virtual screen buffer 708 without the processor 64 or other programintervention. The virtual screen buffer 708, which is a copy of thevideo image stored in the frame buffer 62, may correspond to a 1280pixel by 1024 pixel viewable area with 12 bits representing the coloreach pixel, or a 1600 pixels by 1200 pixel viewable area with 8-15 bitsrepresenting the color for each pixel, for example.

The scanner code 706 may scan the virtual screen buffer 708 for changesin the graphical data. Similar to the comparison performed by thecapture engine 132, the scanner code 706 may analyze the virtual screenbuffer 708 for blocks of graphical data that have changed. Specifically,the scanner code 706 may calculate CRC values for each of the blocks andstore the CRC values in its own CRC table 711. The scanner code 706 thencompares the calculated CRC values with previously stored CRC values. Ifthe CRC values match, then the block has not changed. However, if theCRC values do not match, then scanner code 706 may provide the block ofgraphical data to the compression code 140, encoder code 142, encryptioncode 144, and transmission code 146 for further processing, as discussedabove. The exemplary processing of the graphical data in the remotemanagement controller 60B is shown in greater detail in FIGS. 9A and 9B.

FIGS. 9A and 9B are process flow diagrams illustrating the exemplary useof the remote management controller 60B of FIG. 8. In FIG. 9A, theprocess flow diagram of the capture engine 132 is generally referred toby reference numeral 800. The process begins at block 802. In block 804,the processor 64 configures the capture engine 132. The configurationmay include informing the capture engine 132 of the location in thememory 76 of the VSB 708 and the VSB CRC table 710. The processor 64then enables the capture engine 132 to begin capturing information atblock 806. Then, the capture engine 132 clears the scanned slice flags,which may be stored in the previous scan register 616, as shown in block808.

Once the scanned flags are cleared, the capture engine 132 may wait forthe next slice to be captured, as shown in block 810. Instead of theprocessor 64 initializing a slice capture as discussed above, thecapture engine 132 initiates a slice capture in response to the DMAengine 704 finishing a previous slice. Once a new slice is indicated,the capture engine 132 determines whether the slice has been scannedpreviously, as shown in block 812. This may include examining the bitswithin the previous scan register 616 to determine the slices that arepreviously scanned. If the slice has been previously scanned, then thecapture engine 132 waits for the next slice, as shown in block 810.

However, if the slice has not been previously scanned, then the captureengine 132 may capture and process the blocks of graphical data withinthe slice in blocks 814-818. At block 814, the capture engine 132captures a slice and computes the CRC for each block in the slice. Atblock 816, the capture engine 132 marks the slice as having beenscanned. Marking or changing the bit setting in the previous scanregister 616 may be utilized to indicate that the slice has beenscanned. Then, the block pointer may be reset to the first block in theslice, as shown in block 818.

At block 820, the capture engine 132 may compare the CRC block in thecapture CRC table 150 to the previous value for that block stored in theVSB CRC table 710. If the CRC values match, then the capture engine 132may move the block pointer to the next block within the designatedslice, as shown in block 822. However, if the CRC values do not match,then the capture engine 132 may indicate to the DMA engine 704 to updatethe VSB CRC table 710 with the new CRC value from the capture CRC table150, as shown in block 824. The DMA engine 704 may be notified that itmay move the block to the VSB 708, as shown in block 830. Then, thecapture engine 132 may move the block pointer to the next block withinthe designated slice, as shown in block 822. With the block pointerupdated, the capture engine 132 may determine whether the block is atthe end of the slice, as shown in block 828. If the block is not at theend of the slice, then the capture engine 132 may compare the CRC valuesfor the next block of graphical data at block 820.

Once the slice has been analyzed by the capture engine 132, adetermination is made to whether the remote management system connectionis active or inactive, as shown in block 832. This determination may bemade by the processor 64. If the remote management system connection isactive, the capture engine 132 may determine whether each of the slicesin the video frame buffer have been scanned, as shown in block 834. Ifthe slices have been scanned, the capture engine 132 may clear thescanned slice flags, as shown in block 808. However, if the slices havenot been scanned, the capture engine 132 may wait for the next slice, asshown in block 810. Regardless, if the remote management systemconnection is inactive, the process may end at block 836.

FIG. 9B is a process flow diagram of the processor 64 analyzing blocksof the virtual screen buffer 708 for changes to reduce the amount ofgraphical data that is communicated across the network M. In FIG. 9B,the process flow diagram is generally referred to by reference numeral840. It should be understood that the operation of the capture engine132 described in regard to FIG. 9A and the operation of the processor 64described in regard to FIG. 9B may continue in parallel.

The process of FIG. 9B begins at block 842. At block 844, the scannercode 706 may access a block of the virtual screen buffer 708. Then, atblock 846, the scanner code 706 may calculate the CRC values for a blockin the virtual screen buffer 708. At block 848, the scanner code 706 maydetermine whether each of the blocks have changed in the virtual screenbuffer 708. The determination may be similar to the discussion of block414, which results from comparing the calculated CRC value of a blockwith the stored CRC values in another CRC table. If the block has notchanged, the scanner code 706 may calculate the CRC value for the nextblock in the VSB 708, as shown in block 846. However, if the block haschanged, then the scanner code 706 may store the updated CRC value inanother CRC table 711 as shown in block 850. Once stored, the scannercode 706 may provide or notify the other code, such as the compressioncode 140, the encoder code 142, the encryption code 144, and thetransmission code 146, to further process the changed block similar tothe discussion of blocks 416-430, as shown in blocks 852-860. Then, themanagement code 138 may determine whether the remote management systemconnection is inactive, as shown in block 862. If the remote managementsystem connection is active, the management code 138 may indicate thatthe scanner code may continue to analyze the virtual screen buffer 708,as shown in block 844. However, if the remote management systemconnection is inactive, the process may end at block 864.

FIG. 10 illustrates a functional block diagram of a second alternativeexemplary embodiment of a remote management controller 60C and videographics controller 58 of the managed system 2 of FIG. 2. In thisdiagram 900, the remote management controller 60C may include a changetable 904 to manage the access to the virtual screen buffer 708.Specifically, the change table 904 indicates the status of the blocks ofgraphical data as being changed or unchanged. Thus, the processor 64 candetermine which portions of the VSB 708 have changed since the last timesuch portions of the VSB 708 were interrogated. In other words, the useof the change table 904 enables the processor 64 to determine whether ablock has been modified merely by accessing the change table 904 insteadof re-calculating CRC values for each of the blocks in the virtualscreen buffer 708.

It should be understood that the code and components of the presentembodiment may operate in a similar manner to those discussed above inFIGS. 4 and 8. For instance, the video graphics controller 58 mayinclude various components 116, 118, 120, 122 and 124, and nodes 126,128 and 130, which may operate as discussed above with regard to FIG. 4.Also, the remote management controller 60C may include the captureengine 132, the DMA engine 704, various code 138, 140, 142, 144, and146, the capture buffer 148, capture CRC table 150, memory controller72, and virtual screen buffer 708 and virtual CRC table 710 in thememory 76, which may operate as discussed above with regard to FIGS. 4and 8.

However, to provide enhanced functionality, the remote managementcontroller 60C may include a change mechanism, such as the change table904, to control the access to and manage the changes in the virtualscreen buffer 708. The processor 64 and capture engine 132 may togglebits within the change table 904 to indicate that the blocks ofgraphical data in the virtual screen buffer 708 have been changed or areunchanged. Specifically, the capture engine 132 may set the bits toindicate a change and the processor 64 may clear the bits to acknowledgea change. Accordingly, the processor 64 may efficiently read these“changed” bits in the change table 904 to determine whether the blockshave changed, access the corresponding blocks of changed graphical datain the VSB 708, and clear the changed bit when the blocks of changedgraphical data have been processed. The access between the processor 64and/or capture engine 132 to the change table 904 may be through a32-bit interface, for example. This 32-bit interface provides access tothe status of 32 blocks of data with each read from the change table904. As such, the processor 64 may identify changes within a virtualscreen buffer 708 and may circumvent graphical data synchronizationissues by “locking out” certain regions of video screen buffer 708 frombeing updated, while the changed blocks are being interrogated by theprocessor 64.

For example, to represent the status of each block in the virtual screenbuffer 708, the change table 904 may include “n” blocks per slice by “m”slices by 1 bit for each block in the virtual screen buffer 708. For thevirtual screen buffer 708, a change table 904 of 128×128×1 bits or16,384 bits of data may represent the entire virtual screen buffer 708.In the change table 904, a bit that is set to the value of “0” mayindicate that the block is unchanged. When the graphical data in a blockis changed, the corresponding bit in the change table 904 may be set tothe value of “1.” As a result, the change table 904 may associate eachblock of graphical data in the virtual screen buffer 708 with a specificbit that indicates the status of the block.

The present technique uses an automatic lockout mechanism so that whenthe processor 64 reads from the change table 904, blocks that have beenmodified are “locked out.” For example, if the processor 64 reads a32-bit value from the change table 904, the DMA engine will be unable toupdate up to 32 blocks of the change table. Furthermore, neither thedata in the VSB 708 or the corresponding CRC entry in the CRC table 710may be updated. When the processor 64 is updating the change table 904,the processor 64 writes back the value it read from the change tableafter each modified block has been transmitted. For example, writing a“1” has the effect of clearing the corresponding bit in the change table904. Furthermore, the write cycle also “unlocks” these blocks and allowsthem to be automatically updated once again.

Beneficially, the change table 904 enhances the operation of the remotemanagement controller 60 by improving the efficiency of the changeprocessing. For instance, the use of the change table 904 reduces thecomputational complexity in determining the changed blocks within thevirtual screen buffer 708. That is, the change table 904 enhances theoperation of the remote management controller 60 by reducing theprocessing time through the simplification of identifying changed blocksof graphical data. More specifically, it is believed that the changetable 904 may improve the change determination by about an order ofmagnitude.

The exemplary processing of the graphical data in the remote managementcontroller 60C is shown in greater detail in FIGS. 11A and 11B. FIGS.11A and 11B are process flow diagrams illustrating the exemplary use ofthe remote management controller 60C of FIG. 10. In FIG. 11A, thecapture engine 132, processor 64, and DMA engine 704 may processdifferent blocks within designated slices. In this process flow diagram,which is generally referred to by reference numeral 1000, the presentembodiment may operate in a similar manner to those discussed above inFIGS. 5, 9A and 9B. However, in this flow diagram 1000, the processor 64and capture engine 132 may manage the access to the virtual screenbuffer 708 by utilizing the change table 904 to reduce conflicts inaccessing the virtual screen buffer 708.

The process begins at block 1002. The blocks 1004-1018 operate in asimilar manner to the respective blocks 804-818 of FIG. 9A. Forinstance, at blocks 1004 and 1006, the processor may configure andenable the capture engine 132 to access a slice. Once the capture engine132 has captured the slice, the capture engine 132 clears the scan flagsand waits for the next unscanned slice, as shown in blocks 1008, 1010,and 1012. Once the capture engine 132 has located an unscanned slice, itmay capture it and may calculate the CRC values for the blocks of theslice in block 1014. Then, the capture engine 132 may mark the slice asscanned and reset the block pointer to the first block in the slice, asshown in blocks 1016 and 1018.

Next, the DMA engine 704 may determine if the block has been locked bythe processor 64, as shown in block 1020. If the block is locked, theDMA engine may skip this block and proceed to the next block by movingthe block pointer to the next block in the slice, as shown in block1022. If the pointer reaches the end of the slice, the process flowmoves to block 1036 where the connection is determined to be active orinactive, as generally described previously. If a block pointer has notreached the end of the slice, then the process set forth in block 1020is repeated.

However, if the block is not locked, then the DMA engine 704 may comparethe CRC value in the capture CRC table 150 to the previous value storedin the VSB CRC table 710, as shown in block 1024. If the CRC valuesmatch, then the DMA engine 704 may move the block pointer to the nextblock within the designated slice, as shown in block 1022. However, ifthe CRC values do not match, then the DMA engine 704 may update the VSBCRC table 710 with the new CRC value from the capture CRC table 150, asshown in block 1026. The DMA engine 704 may then move the block contentsfrom the capture buffer 148 to the proper location within the VSB 708,as shown in block 1028. Also, the capture engine 132 may set themodified bit within the change table 904 to indicate that the graphicaldata in that block has changed. This may involve toggling the bitsetting within the change table 904. Then, the DMA engine 704 may movethe block pointer to the next block within the designated slice, asshown in block 1022. With the block pointer updated, the DMA engine 704may determine whether the block is at the end of the slice, as shown inblock 1032. If the block is not at the end of the slice, then the DMAengine 704 may determine if the next block is locked at block 1020.However, if the block is the end of the slice, then the DMA engine 704notifies the capture engine 132 to possibly obtain another slice, asshown in block 1036.

Once the slice has been analyzed by the DMA engine 704, a determinationis made to whether the remote management system connection is active orinactive, as shown in block 1036. This determination may be similar tothe determination made in block 832 of FIG. 9A. If the remote managementsystem connection is active, the capture engine 132 may determinewhether all slices have been scanned, as shown in block 1038. If theslices have been scanned, the capture engine 132 may clear the scannedslice flags, as shown in block 1008. However, if the slices have notbeen scanned, the capture engine 132 may wait for the next slice, asshown in block 1010. Regardless, if the remote management systemconnection is inactive, the process may end at block 1040.

In FIG. 11B, the processor 64 may process different blocks within thevirtual screen buffer 708 by utilizing the change table 904. In thisprocess flow diagram, which is generally referred to by referencenumeral 1041, the present embodiment may operate in a similar manner tothe blocks discussed above. Specifically, the change table 904 mayindicate the changed blocks in the virtual screen buffer 708 to expeditethe processing of changed blocks. In this flow diagram 1041, theprocessor 64 may manage the access to the virtual screen buffer 708 byutilizing the block lock out feature change table 904 to reduce anyconflicts with accesses to the virtual screen buffer 708 by the captureengine 132 or DMA engine 704.

The process begins at block 1042. In this diagram 1041, the processor 64may access a change table 904 to determine if specific blocks of thevirtual screen buffer 708 have changed, as shown in block 1044. This useof the change table 904 by the processor 64 prevents the processor 64from having to analyze unchanged portions of the data in the VSB 708. Atblock 1046, the processor determines if the block has been modified.Similar to the discussion above, the determination of the blocks beingmodified may be based on the setting that corresponds to the block inthe change table 904. For instance, bits set to “0” may indicate thatthe blocks are unchanged and bits set to “1” may indicate that theblocks are changed. If the block is not changed, then the processormoves to the next block, as shown in block 1048.

However, if the setting in the change table 904 indicates a change inthe block, then the block is processed. To begin, at block 1050, theprocessor 64 locks the block. This prevents the DMA engine 704 fromoverwriting the contents of the block in the VSB 708. Following thelocking of the block, the processor 64 processes the block as shown inblocks 1052-1060, which is similar to the discussion of blocks 852-860in FIG. 9B. Once the graphical data is processed, the processor 64 marksthe block as unchanged at block 1061 and unlocks the block of graphicaldata at block 1062. At block 1064, the processor 64 may determine if theremote management system connection is inactive. If the remotemanagement system connection is active, the processor 64 may move to thenext block at block 1048. Furthermore, when the processor 64 hasevaluated all of the blocks in the VSB 708, it may start over at thefirst block. However, if the remote management system connection isinactive, the process may end at block 1066.

The third exemplary embodiment enables the construction of networkpackets that may be directly processed and placed into a network bufferfor direct access by a communication device, such as the NIC 86. Forexample, the technique may place the processed data into a data payloadof a network buffer and calculate a checksum for the processed data.Then, the processor 64 or NIC 86 may be notified to transmit theprocessed data in the network buffer.

FIG. 12 illustrates a functional block diagram of the third alternativeexemplary embodiment of a remote management controller 60D and videographics controller 58 of the managed system 2 of FIG. 2. In thisdiagram 1100, the remote management controller 60D may include a DVRencoder engine 1102 to analyze the designated slice of graphical data.The DVR encoder engine 1102 may include a compression function 1106, anencoder function 1108, an encryption function 1110, and a verificationfunction 1112, which are utilized to process the graphical data in thedesignated slice. After the graphical data is processed, the DVR encoderengine 1102 may place any processed data into one or more networkbuffers 1114 and 1116 to form data packets. Then, when each of the datapackets is full or the data is stale, the DVR encoder engine 1102 maynotify the NIC 86 or the processor 64 that the data in one or more ofthe network buffers 1114 and 1116 is ready for transmission to theremote management system 5.

The code and components of the third embodiment may operate in a similarmanner to those discussed above in FIGS. 4 and 8. For instance, thevideo graphics controller 58 may include various components 116, 118,120, 122 and 124, and nodes 126, 128 and 130, which may operate asdiscussed above with regard to FIG. 4. Also, the remote managementcontroller 60D may include the capture engine 132, the management code138, transmission code 146 and the VSB CRC table 710 in the memory 76along with the capture buffer 148 and capture CRC table 150 associatedwith the capture engine 132, which may operate as discussed above withregard to FIGS. 4 and 8. Further, the compression function 1106, encoderfunction 1108, and encryption function 1110 may be similar to thecompression code 140, encoder code 142, and encryption code 144 of FIGS.4 and 8, respectively.

However, to more efficiently process the graphical data in thedesignated slices, the remote management controller 60D may include aDVR encoder engine 1102. The DVR encoder engine 1102 may analyze thegraphical data in the capture buffer 148 and place the data into anetwork buffer 1114 or 1116 for the NIC 86 to transmit the changedgraphical data. In this embodiment, the processor 64 uses thetransmission code 146 to allocate and manage one or more network buffers1114 and 1116 that are directly accessible by the DVR encoder engine1102. The network buffers 1114 and 1116 include network header fields1114A and 1116A, payload fields 1114B and 1116B, and CRC fields 1114Cand 1116C. As an example, the network header field 1114A is filled outby the transmission code 146 with network information. The networkinformation may include transmission control protocol/Internet protocol(“TCP/IP”) data that specifies the source and destination of the datapacket, for instance. The network header field 1114A may be 14 bytes inlength. The processor 64 may calculate a portion of the CRC field 1114Cfor the network header field 1114A by executing the transmission code146.

To operate, the processor 64, which may execute the transmission code146, allocates additional network buffers 1114 and 1116 for the DVRencoder engine 1102 which includes a register or pointer 1103 to theallocated network buffer. The transmission code 146 may notify the DVRencoder engine 1102 of the data payload field 1114B size and locationfor the data to be placed. The notification may include setting aregister with the starting location of the data payload field 1114Balong with the maximum size. Further, the DVR encoder 1102 calculates aportion of the CRC field 1114C for the payload field 1114B and providesthis value to the processor 64. The CRC values for the payload field maybe calculated by the verification function 1112, which is discussedbelow. This eliminates the need for the processor 64 to have to accessany data in the payload field 1114B. The processor 64 completes thecalculation of CRC field 1114C using the partial calculations of the CRCfor the network header field 1114A and the data payload field 1114B.Further, the processor 64 may notify the NIC 86 to send the data buffer1114 or 1116 via the network N or M. The notification may result fromthe DVR encoder engine 1102 generating an interrupt to the processor 64when the network buffer 1114 and 1116 is full or may be based on theexpiration of a timer (i.e. the data is stale).

The DVR encoder engine 1102 may detect changes in the graphical dataplaced in the capture buffer 148 and further process the graphical data,as discussed above. For instance, the DVR encoder engine 1102 determineswhether the data within the block has been modified. The determinationis made by comparing the calculated CRC value in capture CRC table 150with the previously calculated CRC value of the specific block that islocated in the image CRC table 710. It should be noted that thisembodiment does not include a shadow copy of the image display on theremote monitor 8 in a virtual screen buffer, as did the embodimentsillustrated in FIGS. 8 and 10. Nevertheless, this embodiment does usethe image CRC table 713 which is similar to the VSB CRC table 710.

Further, the DVR encoder engine 1102 may include a compression function1106, an encoder function 1108, an encryption function 1110 and averification function 1112. The functions 1106, 1108, 1110, and 1112modify the changed data for transmission in a similar manner to the codediscussed above. To enhance efficiency, the unchanged graphical data andchanged graphical data may be handled differently. For instance,unchanged graphical data may be dropped and another block analyzed forany possible changes. However, for the changed data, the DVR encoderengine 1102 may provide notification or process the changed data withthe other functions 1106-1112 within the DVR encoder engine 1102.

Unlike the previous embodiments in which the processor 64 compressed,encoded, and/or encrypted the data and then formed the data into apacket suitable for transmission over the network, the presentembodiment relieves the processor 64 of the duties regarding theprocessing of the data portion of the packet. Rather, this functionalityis built into the DVR encoder engine 1102, as illustrated by thecompression function 1106, the encoder function 1108, the encryptionfunction 1110, and the verification function 1112. Specifically, the DVRencoder engine 1102 calculates the CRC for the data portion of thepacket and loads it into a register so that it may be accessed by theprocessor 64, which can then combine this value with the CRC for theheader to generate the final CRC for the packet. This greatlyaccelerates packet processing and removes throughput constraints relatedto how fast the processor 64 can access its memory 76.

Once the fully processed data packet is placed into the network buffer1114, the transmission code 146 may notify the NIC 86 that the networkbuffer 1114 is ready for transmission over the management network M. Forinstance, the transmission code 146 may signal the NIC 86 that the datain the network buffer 1114 is ready for transmission to the remotemanagement system 5. Then, the NIC 86 may start transmitting the data inthe network buffer 1114 to the remote management system 5. The DVRencoder engine 1102 may not send additional changed graphical data tothe network buffer 1114 until the NIC 86 has transmitted the datasuccessfully to the remote management system 5. However, the DVR encoderengine 1102 may be configured to utilize one or more network buffers,such as another network buffer 1116, when one network buffer 1114 isbeing transmitted to the remote management system 5. Once thetransmission is complete, the DVR encoder engine 1102 may be signaled tostart processing captured data to the network buffer 1114, while the DVRencoder engine 1102 fills the buffer 1116. In this embodiment, it shouldbe noted that there may be buffers in addition to the buffers 1114 and1116, and that the number of buffers may be selected to ensure that atleast one buffer is always available to be filled by the DVR encoderengine 1102. It should also be noted that hardware support may not beprovided for all buffers in this embodiment and that the remainingbuffers may be provided in software. For example, in this embodiment,one hardware buffer may be provided, with the remaining buffers beingprovided in software.

Beneficially, the DVR encoder engine 1102 enhances the performance ofthe system. For instance, the DVR encoder engine 1102 reduces theinvolvement of the processor 64 in handling the movement of thegraphical data and processing the graphical data. Thus, the processor 64is free to handle other tasks for the managed system. Furthermore, itshould be clear from the above description that the delivery of datapackets over the network will determine how frequently the DVR encoderengine 1102 receives buffers. When more network bandwidth is available,the DVR encoder engine 1102 will stall less frequently waiting foravailable network buffers. This, in turn, decreases the amount of timethe capture engine 132 is stalled waiting for the DVR encoder engine1102 to finish analyzing a slice. Thus, the capture engine is able tocapture more slices per second, thus translating into a higher refreshrate for the monitor 8 associated with a remote management system 5.Conversely, when less network bandwidth is available, the resultingrefresh rate for the monitor 8 associated with a remote managementsystem 5 will be reduced.

The exemplary processing of the graphical data in the remote managementcontroller 60D is shown in greater detail in FIGS. 13A, 13B and 13C.FIGS. 13A, 13B and 13C are process flow diagrams illustrating theexemplary use of the remote management controller 60D of FIG. 12 inaccordance with the third embodiment. Specifically, FIGS. 13A and 13Billustrate an exemplary process performed by the digital videoredirection module 92D, and FIG. 13C illustrates an exemplary processperformed by the processor 64. The process flow diagrams are generallyreferred to by reference numerals 1200, 1201, and 1260, respectively. Inthe process flow diagrams 1200 and 1201, the present embodiment mayoperate in a similar manner to those discussed above in FIGS. 4, 8 and10. However, as described in these flow diagrams 1200 and 1201, the DVRencoder engine 1102 may analyze the graphical data in the capture buffer148, process the changed data, and place the processed data into anetwork buffer 1114 along with a CRC value associated with the processeddata. Then, the processor 64 may complete and transmit the networkbuffer 1114 and 1116 to another device via the NIC 86.

The process of the digital video redirection module 92D begins at block1202. The blocks 1204-1216 operate in a similar manner to the respectiveblocks 1004-1016 of FIG. 10. For instance, at blocks 1204 and 1206, theprocessor 64 may configure and enable the capture engine 132. Then, thecapture engine 132 may clear the scan flags and wait for the nextunscanned slice, as shown in blocks 1208, 1210, and 1212. Once thecapture engine 132 has a slice, it may capture data into the capturebuffer 148 and calculate the CRC values for the blocks of the slice inblock 1214. At block 1216, the capture engine 132 may mark the slice asscanned, as discussed above. Then, the capture engine 132 signals thecompletion of the capture to the DVR encoder engine 1102, as shown inblock 1218.

Once the capture engine has completed its processing of the graphicaldata, the DVR encoder engine 1102 may further process the graphicaldata. To begin, at block 1220, the DVR encoder engine 1102 compares theCRC value stored in the capture CRC table 150 with the previously storedCRC value in the image CRC table 713 to determine if the CRC values aredifferent. If the CRC values for the current block are the same, the DVRencoder engine 1102 moves the block pointer to the next block within theslice, as shown in block 1226.

However, if the CRC values are different, the DVR encoder engine 1102may reset the stale data timer, as shown in block 1224, and update theimage CRC table 713 with the new CRC value from the capture CRC table150, as shown in block 1228. It should be noted that the stale datatimer is reset when data is written into a buffer, so that if nothing iswritten into the buffer by the time the timer expires, the buffer isdeemed “stale” and scheduled for delivery via a NIC. Then, at block1230, the compression function 1106 may compress the block of graphicaldata. At block 1232, the encoder function 1108 may encode the compresseddata into a specific format to form encoded data. Then, the encryptionfunction 1110 may encrypt the encoded data into a processed data portionof a packet, as shown in block 1234.

Beneficially, in this embodiment, once the graphical data has beenprocessed, the DVR encoder engine 1102 may place the processed data intothe network buffers 1114 or 1116, as shown in blocks 1236-1248. At block1236, the DVR encoder engine 1102 may determine whether payload space isavailable in the network buffer 1114 or 1116. It should be noted thatmore than one slice of graphical data may be buffered before the NIC 86transmits the graphical data to the remote management system 5. In otherwords, another buffer may be provided to the DVR encoder engine 1102before the previous buffer has been processed by the processor 64. Ifnetwork payload space is not available, then the DVR encoder engine 1102may notify the processor at block 1238. The notification may besignaling the processor 64 to allocate more network buffers, forexample. Then, the DVR encoder engine 1102 may determine whether anetwork buffer is available, as shown in block 1240. If a network bufferis not available, then the DVR encoder engine 1102 may wait for theprocessor 64 to present another network buffer, as shown in block 1242.Then, DVR encoder engine 1102 may again determine whether the networkbuffers are available at block 1240. If another network buffer isavailable, then the DVR encoder engine 1102 may reset the CRC value inthe CRC register, as shown in block 1244. Accordingly, once the CRC isreset in block 1242 or the determination is made that payload space isavailable in block 1236, the processed data may be placed into thenetwork buffer 1114 at block 1246. Then, the CRC value for the networkbuffer 1114 may be updated as shown in block 1248. The calculation ofthe CRC value may be completed by the verification function 1112 of theDVR encoder engine 1102, which finalizes the packetization of the dataportion of the packet.

With the processed data placed into the network buffer, the DVR encoderengine 1102 may determine whether the block is the end of the slice atblock 1250. If the block is not the end of the slice, the DVR encoderengine 1102 may continue to analyze the CRC values in block 1220, asdiscussed above. However, if the block is the end of a slice, then theDVR encoder engine 1102 may signal the capture engine 1102 to retrieveanother slice, as shown in block 1252. Then, a determination is made towhether the remote management system connection is active or inactive,as shown in block 1254. This determination may be made by the captureengine 132, or even the DVR encoder engine 1102, based on receiving asignal from the processor 64. If the remote management system connectionis active, the capture engine 132 may determine whether all slices havebeen scanned, as shown in block 1256. If the slices have been scanned,the capture engine 132 may clear the scanned slice flags, as shown inblock 1208. However, if the slices have not been scanned, the captureengine 132 may wait for the next slice, as shown in block 1210.Regardless, if the remote management system connection is inactive, theprocess may end at block 1258.

FIG. 13C is a process flow diagram of the processor 64 in the thirdalternative exemplary embodiment of a remote management controller 60Dand video graphics controller 58 of FIG. 12. In this flow diagram, theprocessor 64 allocates one or more network buffers, such as networkbuffers 1114 and 1116, for the DVR encoder engine 1102 to fill withchanged graphical data. Then the processor 64 finishes the CRCcalculation and notifies the NIC 86 that to transfer the network buffer1114 or 1116 to the network. The process begins at block 1262. At block1264, the processor 64 allocates resources for the DVR encoder engine1102 and configures the capture engine 132, as discussed above in block1204 of FIG. 13A. Then, at block 1266, the processor 64 may enable thecapture engine 132 to capture slices of graphical data.

The processor 64 may allocate and manage the network buffers 1114 and1116, as shown in blocks 1268-1272. At block 1268, the processor 64 mayallocate network buffers, such as network buffers 1114 and 1116, to theDVR encoder engine 1102 and initialize the network header associatedwith each of the network buffers 1114 and 1116. Then, the processor 64may notify the DVR encoder engine 1102 that the network buffers areavailable, as shown in block 1270. This notification may be accomplishedby providing the DVR encoder engine 1102 with the starting address andmaximum packet length of the data payload buffer 1114B. At block 1272,the processor 64 may determine whether the network buffer is full orincludes stale data. Stale data, as noted above, may include situationswhere the buffer is not full and data that has been present for apredetermined period of time. Accordingly, if the data within thenetwork buffer is not stale and the network buffer is not full, then theprocessor may wait for the DVR encoder engine 1102 to notify theprocessor 64 that the network buffer is full or the data is stale. Oncethe processor 64 receives this notification, the processor 64 mayfurther process the network buffers. Here, the notification may beprovided by the DVR encoder engine 1102 sending an interrupt to theprocessor 64.

The processor 64 may further process the network buffers fortransmission by preparing the network buffers for transmission, as shownin blocks 1276-1282. It should be noted that the processor 64 may makethe second network buffer 1116 available to the DVR encoder engine 1102before processing the first network buffer 1114. This allows the DVRencoder engine 1102 to proceed with filling the next buffer while thedata in the first buffer is being finalized and transmitted. At block1276, the processor 64 may read the network CRC value for the datapayload portion of the network buffer from the DVR encoder engine 1102.Then, the processor 64 may calculate the network CRC value for thenetwork header portion of the network buffer as shown in block 1278,although the network CRC value for the network header portion may havebeen previously calculated or otherwise provided by the processor 64.Using the partial CRC values, the processor 64 may complete thecalculation of the CRC value for the entire network packet and supplythis value to the end of the network buffer, as shown in block 1280. Atblock 1282, the processor notifies the NIC 86 to transfer the completepacket in the network buffer to the network. Then, the management code138 may determine whether the remote management system connection isinactive, as shown in block 1284. If the remote management systemconnection is active, then the processor may provide another networkbuffer to the DVR encoder engine 1102, as shown in block 1268. However,if the remote management system connection is inactive, the process mayend at block 1286.

FIG. 14 is a block diagram illustrating an exemplary DVR encoder engine1102 of FIG. 12. In this embodiment, the DVR encoder engine 1102 mayinclude logic and components to process the graphical data beingprovided from the capture engine 132. The DVR encoder engine 1102 mayinclude an encoder control block 1402 that receives inputs from variouslogic to manage the interactions with the processor 64 and the captureengine 132 and processes the changed graphical data.

The encoder control block 1402 may manage the processing of the changedgraphical data by exchanging signals with the capture engine 132 and theprocessor 64. To provide this functionality, the encoder control block1402 may utilize the DVR interrupt signal DVRInt, the capture donesignal CaptureDone, and the capture next slice signal CaptureNext. TheDVR interrupt signal DVRInt may be utilized to notify the processor 64that the network buffer 1114 is full, stale, or that other networkbuffers are needed. As discussed above, the capture done signalCaptureDone is transmitted from the capture engine 132 to the encodercontrol block 1402 to indicate that the current slice has been capturedand is ready for processing. Accordingly, the capture next slice signalCaptureNext is generated by the encoder control block 1402 to thecapture engine 132 to indicate that the processing of the previous sliceis completed and that the next slice may be captured. In this manner,the capture engine 132 and the DVR encoder engine 1102 may notify eachother when the respective functions are completed. That is, the captureengine 132 and the DVR encoder engine 1102 may manage the flow of databetween each other without the intervention of the processor 64 and maybe regulated by the network bandwidth or network buffers 1114 and 1116that are utilized to transmit the changed graphical data.

Based on the control signals, other sources of incoming signals includethe graphical data from the capture buffer 148. The graphical data fromthe capture buffer 148 is provided to the pixel accumulator 1404. Thepixel accumulator 1404 divides the pixel data into even and odd pixels,which increases the bits on the bus and decreases the clock speed usedfor accessing the bits. The pixel accumulator 1404 provides thesegmented graphical data to the pixel cache 1406. The pixel cache 1406performs a second order compression on the segmented graphical data. Thecompression of the segmented graphical data may be based on the encodepixel signal that is provided from the encoder control block 1402, whichmay be based on different coding techniques or schemes. The compresseddata is provided to an accumulator module 1408 that may receive theencoded graphical data along with the other operational codes based ondata from the capture CRC table 150, which is discussed below.

Once the encoded graphical data and operational codes are provided tothe accumulator module 1408, it packages these variable-sized bit valuesinto word-sized values which are then provided to the encoded databuffer 1414. The encoded data buffer 1414 may include 128 bits of memoryto store the encoded data before it is encrypted in the encryptionmodule 1416. The encryption module 1416 may encrypt the encoded data toform processed data that may be stored in the data payload field 1114Bof the network buffer 1114. Also, the encryption module 1416 may providethe processed data to the packet CRC calculation module 1418. The packetCRC calculation module 1418 may calculate the CRC values for thedifferent data packets and store the associated calculated CRC values inthe CRC field 1114C or may store the CRC values in the DVR registers foraccess by the processor 64 or NIC 86.

FIG. 15 illustrates a functional block diagram of a fourth alternativeexemplary embodiment of a remote management controller 60E and videographics controller 58 of the managed system 2 of FIG. 2 constructed inaccordance with embodiments of the present invention. In this diagram1500, the remote management controller 60E may obtain multipledesignated slices to increase the number of slices that may be analyzed.The digital video redirection module 92E may include a capture engine1502, multiple capture buffers 148 ₁-148 ₂, multiple capture CRC tables150 ₁-150 ₂, and a DVR encoder engine 1510. Thus, by analyzing multipledesignated slices for changes in the graphical data, the refresh orpresentation rate of the graphical data provided to other systems maymirror the video image that may be obtained from a monitor that isdirectly connected to the managed system 2.

Accordingly, for exemplary purposes, the managed system 2 may include acapture engine 1502, multiple capture buffers 148 ₁-148 ₂, multiplecapture CRC tables 150 ₁-150 ₂, a DVR encoder engine 1510, processor 64,memory controller 72, image CRC table 713, and memory 76. As such, thevarious code and components of the present embodiment may operate in asimilar manner to those discussed above in FIGS. 4, 8 and 12. Forinstance, the monitor 4, remote management system 5, NIC 86, videographics controller 58, frame buffer 62, and network M may operate, asdiscussed above with regard to FIG. 4. Also, the capture buffers 148₁-148 ₂, capture CRC tables 150 ₁-150 ₂, processor 64, code 138 and 146,image CRC table 713 and network buffers 1114 and 1116 may operate asdiscussed above with regard to FIG. 12.

However, to further detect and provide the changed graphical data to theremote management system 5, the remote management controller 60E mayinclude a capture engine 1502 that is configured to handle multiplecapture buffers 148 ₁-148 ₂ and capture CRC tables 150 ₁-150 ₂. A firstslice information register 1506 and a second slice information register1508 may be implemented to identify the contents of multiple capturebuffers 148 ₁-148 ₂ and capture CRC tables 150 ₁-150 ₂ to the DVRencoder engine 1510. Although only two buffers and tables are shown, itshould be understood that the number of buffers and tables may be chosenbased upon system performance requirements. With these multiple buffersand tables, the capture engine 132 can operate extremely efficiently andquickly to capture slices of video data. Multiple capture buffers mayallow the DVR encoder engine 1510 to analyze a slice of graphical datawhile another slice is being captured into the alternate buffer. Thismay prevent the capture engine 1502 from stalling while waiting for theDVR encoder engine 1510 to finish processing a slice of graphical data.Operating in this pipelined fashion, data can be captured so quicklythat it may be desirable to cease data capture and/or to cease networktransmission of video data from time to time. To accomplish this, withinthe capture engine 1502, a throttle agent 1504 may be utilized to pausethe capture engine 1502 for a predetermined period or an automaticallydetermined period after complete frame sequences have been captured.This allows the data generated from the previous capture sequence to betransmitted periodically as complete snapshots of the frame buffer 62.The throttle agent 1504 allows complete frame sequences to occur more orless often depending on the complexity of the captured image and/or theavailable network bandwidth

In addition, the remote management controller 60E may include a DVRencoder engine 1510 that is configured to communicate with multiplecapture buffers 148 ₁-148 ₂ and capture CRC tables 150 ₁-150 ₂. Withinthe DVR encoder engine 1510, a first buffer descriptor register 1512 isassociated with the network buffer 1114 and a second buffer descriptorregister 1514 is associated with the other network buffer 1116. Each ofthe buffer descriptor registers 1512 and 1514 are utilized to storeprocessed data to the network buffers 1114 and 1116. The registers 1512and 1514 may allow the DVR encoder engine 1510 to continue to streamdata to memory instead of stalling when waiting for the processor 64 toprovide another network buffer 1114 or 1116. Thus, the DVR encoderengine 1510 may provide an enhanced and more efficient mechanism forhandling changed graphical data.

Similar to the operation discussed above, the processor 64 may executemanagement code 138 and transmission code 146 to manage the multiplenetwork buffers 1114 and 1116. The processor 64, which may operatesimilar to the discussion of FIG. 12, may be configured to handlemultiple packet buffers being processed in a piplelined fashion. In thisembodiment, the capture engine 1502 may obtain slices of graphical datafrom the video graphics controller 58 and store the graphical data inthe respective capture buffers 148 ₁-148 ₂. Similarly, the processor 64may utilize the transmission code 146 to communicate with the DVRencoder engine 1510 to transmit the processed data to other systems, asdiscussed above. The transmission code may be configured to handlecommunication with one or more registers, such as registers 1512 and1514, to provide the data to the network buffers efficiently. As such,the processor 64 may be able to provide the graphical data at a fasterrate that is substantially simultaneous with the video image beingprovided from the video graphics controller 58.

It should be noted that the capture engine 1502 and the DVR encoderengine 1510 may be configured to operate with any number of capturebuffers, CRC tables, and network buffers. That is, the capture engine1502 and the DVR encoder engine 1510 may include two, three, four ormore capture buffers and CRC tables to efficiently process and providethe graphical data in a substantially simultaneous manner. For instance,the capture engine 1502 and the DVR encoder engine 1510 may beconfigured to operate with three capture buffers and three CRC tables.This allows the DVR encoder engine 1502 to process three slices, whichmay be continuous slices of the video image, without having to reducethe skipping of slices of the video frame. Further, the capture engine1502 and the DVR encoder engine 1510 may be configured to operate withcapture buffers and CRC tables that are associated with differentportions of the video image. For example, the capture engine 1502 maydivide the video image into three different sections with multipleslices in each section. In this manner, the capture engine 1502 may beanalyzing the different slices from different sections of the videoimage to improve the efficiency of the remote management controller 60.Regardless, the increase in slices being processed increases thepresentation rate to a substantially simultaneous rate.

While the invention may be susceptible to various modifications andalternative forms, specific embodiments have been shown by way ofexample in the drawings and have been described in detail herein.However, it should be understood that the invention is not intended tobe limited to the particular forms disclosed. Rather, the invention isto cover all modifications, equivalents, and alternatives falling withinthe spirit and scope of the invention as defined by the followingappended claims.

1. A remote management controller comprising: a capture engineconfigured to obtain a slice of video data output from a video graphicscontroller, calculate at least one value correlative to the slice ofvideo data, and, if the calculated value for any portion of the slicediffers from a value for a previously obtained corresponding portion,move the portion to a virtual screen buffer and update a first tableassociated with the virtual screen buffer with the calculated value, thefirst table configured to store values for each slice of video data; anda processor configured to access the video data from the virtual screenbuffer, calculate a value correlative to each portion of video data inthe virtual screen buffer, and process the portion of video data in thevirtual screen buffer for transmission to a remote system if thecalculated value for the portion of video data in the virtual screenbuffer differs from the calculated value for the portion of video datastored in a second table associated with an image related to the remotesystem.
 2. The remote management controller, as set forth in claim 1,wherein the capture engine comprises at least one buffer in which tostore the slice of video data.
 3. The remote management controller, asset forth in claim 1, wherein the capture engine comprises a directmemory access engine configured to move the portion of video data to thevirtual screen buffer.
 4. The remote management controller, as set forthin claim 1, wherein the at least one value calculated by the captureengine comprises a cyclic redundancy check.
 5. The remote managementcontroller, as set forth in claim 1, wherein the capture enginecomprises a capture table in which to store the at least one valuecalculated by the capture engine.
 6. The remote management controller,as set forth in claim 1, wherein the video data is obtained from adirect video output of the video graphics controller.
 7. The remotemanagement controller, as set forth in claim 1, wherein the processor isconfigured to process the video data by compressing the video data. 8.The remote management controller, as set forth in claim 1, wherein theprocessor is configured to process the video data by encoding the videodata.
 9. The remote management controller, as set forth in claim 1,wherein the processor is configured to process the video data byencrypting the video data.
 10. The remote management controller, as setforth in claim 1, wherein the processor is configured to process thevideo data by forming the video data into at least one packet suitablefor transmission to the remote system.
 11. The remote managementcontroller, as set forth in claim 1, wherein the capture engine tracksslices of video data to ensure that all slices of a video image havebeen scanned before previously scanned slices are re-scanned.
 12. Amethod of processing video data for transmission to a remote system, themethod comprising: obtaining a slice of video data output from a videographics controller; calculating at least one value correlative to theslice of video data; if the calculated value for any portion of theslice differs from a value for a previously obtained correspondingportion, moving the a portion to a virtual screen buffer and updating afirst table associated with the virtual screen buffer with thecalculated value, the first table configured to store values for eachslice of video data; accessing the video data from the virtual screenbuffer; calculating a value correlative to the portion of video data inthe virtual screen buffer; and processing the portion of video data inthe virtual screen buffer for transmission to a remote system if thecalculated value for the portion of video data in the virtual screenbuffer differs from the calculated value for the corresponding portionof video data stored in a second table associated with an image relatedto the remote system.
 13. The method, as set forth in claim 12,comprising storing the slice of video data in a buffer.
 14. The method,as set forth in claim 12, wherein the slice of video data comprises aplurality of blocks of video data.
 15. The method, as set forth in claim14, wherein calculating the value correlative to each portion of theslice and calculating the value correlative to portion of video data inthe virtual screen buffer comprises calculating a cyclic redundancycheck.
 16. The method, as set forth in claim 12, comprising trackingslices of video data to ensure that all slices of a video image havebeen scanned before previously scanned slices are re-scanned.
 17. Themethod, as set forth in claim 12, wherein obtaining the slice of videodata comprises obtaining the slice of video data from a direct videooutput of the video graphics controller.
 18. The method, as set forth inclaim 12, wherein processing comprises compressing the video data. 19.The method, as set forth in claim 12, wherein processing comprisesencoding the video data.
 20. The method, as set forth in claim 12,wherein processing comprises encrypting the video data.
 21. The method,as set forth in claim 12, wherein processing comprises forming the videodata into at least one packet suitable for transmission to the remotesystem.
 22. A computer comprising: at least one central processing unit;main memory accessible by the at least one central processing unit; avideo graphics controller configured to receive video data from the atleast one central processing unit and to generate a video data output; aremote management controller coupled to receive the video data outputfrom the video graphics controller, the remote management controllercomprising a capture engine and a processor, the capture engine beingconfigured to obtain a slice of video data output from a video graphicscontroller, calculate at least one value correlative to the slice ofvideo data, and, if the calculated value for any portion of the slicediffers from a value for a previously obtained corresponding portion,move the portion to a virtual screen buffer and update a first tableassociated with the virtual screen buffer with the calculated value, thefirst table configured to store values for each slice of video data andthe processor being configured to access the video data from the virtualscreen buffer, calculate a value correlative to each portion of thevideo data in the virtual screen buffer, and process the portion ofvideo data in the virtual screen buffer for transmission to a remotemanagement system if the calculated value for the portion of video datain the virtual screen buffer differs from the calculated value for theportion of video data stored in a second table associated with an imagerelated to the remote system.
 23. The computer, as set forth in claim22, wherein the capture engine comprises at least one buffer in which tostore the slice of video data.
 24. The computer, as set forth in claim22, wherein the capture engine comprises a direct memory access engineconfigured to move the portion of video data to the virtual screenbuffer.
 25. The computer, as set forth in claim 22, wherein the at leastone value calculated by the capture engine and the value calculated bythe processor comprises a cyclic redundancy check.
 26. The computer, asset forth in claim 22, wherein the capture engine comprises a capturetable in which to store the at least one value calculated by the captureengine.
 27. The computer, as set forth in claim 22, wherein the slice ofvideo data is obtained from a direct video output of the video graphicscontroller.
 28. The computer, as set forth in claim 22, wherein theprocessor is configured to process the video data by compressing thevideo data.
 29. The computer, as set forth in claim 22, wherein theprocessor is configured to process the video data by encoding the videodata.
 30. The computer, as set forth in claim 22, wherein the processoris configured to process the video data by encrypting the video data.31. The computer, as set forth in claim 22, wherein the processor isconfigured to process the video data by forming the video data into atleast one packet suitable for transmission to the remote managementsystem.
 32. The computer, as set forth in claim 22, wherein the captureengine tracks slices of video data to ensure that all slices of a videoimage have been scanned before previously scanned slices are re-scanned.